/*
 * @lc app=leetcode.cn id=167 lang=javascript
 *
 * [167] 两数之和 II - 输入有序数组
 */

// @lc code=start
/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */

/*  暴力解法    

    1. 找到所有的组合,使用二维数组保存
    2. 遍历所有组合，返回满足的组合
*/
// var twoSum = function(numbers, target) {
//     let arr = [];       // 用来保存所有的二维数组

//     for(let i = 0; i < numbers.length; i++) {
//         arr.push([numbers[i]]);
//         for(let j = 1+i; j < numbers.length; j++) {
//             arr.push([...arr[arr.length-1], numbers[j]])
//         }
//     }

//     let res = [];
//     for(let i = 0; i < arr.length; i++) {
//         let num = 0;
//         for(let j = 0; j < arr[i].length; j++) {
//             num += arr[i][j];
//         }   
//         if(num === target) {
//             res.push(arr[i]);
//         }
//     }

//     console.log(res);
// };


/*  对撞指针    

    1. 定义两个指针l, r
    2. 如果在区域中大于目标值，l++
    3. 如果在区域中小于目标值，r++
    4. 否则保存起来
*/
var twoSum = function(numbers, target) {
    let len = numbers.length,
        l = 0,          // 在[l...r]中找到是否满足的目标值
        r = len - 1;

    while(l < r) {
        if(numbers[r] + numbers[l] === target) {
            return [l+1, r+1];
        } else if(numbers[r] + numbers[l] < target) {
            l++;
        } else {
            r--;
        }
    }
};
let res = twoSum([2,4,7], 9);
console.log(res);
// @lc code=end

